<?php
/**
 * @version 1.0
 * @since June-2008
 * @package lib
 * @subpackage data
 * @name CFileStore
 * @deprecated Lớp lưu trữ bằng file. Sử dụng cách ghi kiểu CVS để lưu các trường trong một bản ghi
 * @todo Lớp mở rộng từ lớp CStore
*/
class CFileStore extends CStore
{
	/**
	 * @var Thuộc tính handle của file
	 */
	public $directory;
	/**
	 * Phương thức khởi tạo một đối tượng file
	 * @param $file_name string Tên file lưu dữ liệu
	 */
	function __construct($directory)
	{
		$this->directory = $directory;
		parent::__construct();
	}
	/**
	 * Phương thức mở file để chuẩn bị thực hiện các thao tác
	 *
	 */
	function connect()
	{
	}
	/**
	 * Phương thức đóng file
	 *
	 */
	function close()
	{
	}
	/**
	 * PHương thức lấy ra một bản ghi của file
	 *
	 * @param $table string Tham số ảo để kế thừa từ lớp trừu tượng CStore
	 * @param $condition mixed Điều kiện select. Tham số ảo để kế thừa từ lớp CStore 
	 * @param $options mixed Các tham số để select. Tham số ảo để kế thừa từ lớp CStore 
	 * @return mixed Bản ghi đầu tiên của file
	 */
	function select($table, $condition = false, $options = array())
	{
		if($file_name = $this->get_file_name($condition))
		{
			return $this->file_info($this->directory.'/'.$table.'/'.$file_name)+array('data'=>file_get_contents($this->directory.'/'.$table.'/'.$file_name));
		}
		return array();
	}
	/**
	 * Phương thức lấy ra tất cả các bản ghi của file
	 *
	 * @param $table string Tham số ảo để kế thừa từ lớp trừu tượng CStore
	 * @param $condition mixed Tham số ảo để kế thừa từ lớp CStore 
	 * @param $options mixed Tham số ảo để kế thừa từ lớp CStore 
	 * @return mixed Một mảng chứa tất cả các bản ghi của file
	 */
	function select_all($table, $condition = false, $options = array())
	{
		$dir = opendir($this->directory.'/'.$table);
		$items = array();
		while($file = readdir($dir))
		{			
			if(is_file($this->directory.'/'.$table.'/'.$file))
			{
				array_push($items, $this->file_info($this->directory.'/'.$table.'/'.$file));
			}
		}
		return $items;
	}
	
	/**
	 * Phương thức chèn một bản ghi mới vào trong file
	 *
	 * @param Tham số ảo $table
	 * @param Tham số giá trị của các bản ghi $values có kiểu mảng
	 */
	function insert($table, $values)
	{
		file_put_contents($this->directory.'/'.$table.'/'.$values['id'], $values['data']);
	}
	function update($table, $values, $condition)
	{
		file_put_contents($this->directory.'/'.$table.'/'.$values['id'], $values['data']);
	}
	function delete($table, $condition)
	{
		@unlink($this->directory.'/'.$table.'/'.$values['id']);
	}
	function file_info($file_name)
	{
		$info = pathinfo($file_name);
		return $info + array(
			'id' => $info['basename'],
			'path'=>$file_name,
			'data'=>'',
		);
	}
	function get_file_name($conditions)
	{
		if(is_string($conditions) or is_numeric($conditions))
		{
			return $conditions;
		}
		elseif(isset($conditions['id']))
		{
			return $conditions['id'];
		}
	}

	function real_path($table,$filename)
	{		
		return realpath($this->directory.'/'.$table.'/'.$filename);
	}
}
/**
 * Hàm này để khởi tạo đối tượng thuộc lớp CFileStore
 * @param Tên file $file_name
 * @return Đối tượng  CFileStore gắn với tên file là fine_name
 */
function CFileStore($directory)
{
	return new CFileStore($directory);
}
?>